package utils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileStorageUtil {
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd_HHmmss");

    /**
     * 确保目录存在，不存在则创建
     */
    public static void ensureDirectoryExists(String directoryPath) throws IOException {
        Path path = Paths.get(directoryPath);
        if (!Files.exists(path)) {
            Files.createDirectories(path);
        }
    }

    /**
     * 生成唯一的文件名
     * @param prefix 文件名前缀
     * @param extension 文件扩展名
     * @return 格式为 prefix_TIMESTAMP_RANDOM.extension
     */
    public static String generateUniqueFilename(String prefix, String extension) {
        String timestamp = DATE_FORMAT.format(new Date());
        int random = (int)(Math.random() * 10000);
        return String.format("%s_%s_%04d.%s", prefix, timestamp, random, extension);
    }

    /**
     * 保存文档内容到文件
     * @param content 文档内容
     * @param directory 保存目录
     * @param filename 文件名
     * @return 保存后的完整文件路径
     */
    public static String saveDocument(String content, String directory, String filename) throws IOException {
        ensureDirectoryExists(directory);
        Path filePath = Paths.get(directory, filename);
        Files.write(filePath, content.getBytes("UTF-8"));
        return filePath.toString();
    }

    /**
     * 保存HTML文档
     * @param htmlContent HTML内容
     * @param baseDir 基础目录
     * @param subDir 子目录(如english/chinese)
     * @param docType 文档类型(raw/processed)
     * @param prefix 文件名前缀
     * @return 保存后的完整文件路径
     */
    public static String saveHtmlDocument(String htmlContent, String baseDir,
                                          String subDir, String docType,
                                          String prefix) throws IOException {
        String dirPath = Paths.get(baseDir, docType, subDir).toString();
        String filename = generateUniqueFilename(prefix, "html");
        return saveDocument(htmlContent, dirPath, filename);
    }
}